Analyzing arrival order at carcasses

IDENTIFY FEEDING EVENTS

Let’s move on to examining an individual’s movement patterns to identify arrival at a carcass site. Going to pick the individual with the longest run:

Acceleration

Visualize acceleration Okay, that’s not very informative, as expected. Let’s split this by day and just look at one day’s sequence.

Okay, this is kind of cool. But I’m not good enough at interpreting accelerometer data to know for sure how to read this.

Speed and altitude

What about speed and altitude? Can the combination of those tell us what we need to know?

Relative altitude

In order for this to make any sense at all, we need to cross-reference these measurements with elevation data for Israel. We can obtain this using the elevatr package.

Speed/relative altitude plots

Now let’s re-do the speed and altitude plots, using altitude above ground:

KNOWN FEEDING EVENTS

Feeding event data

Read in the feeding event data (this is the most updated version we have; should work on getting more info from more recent feeding events.)

Sunrise/sunset, day/night to datAnnot

## [1] 75
##   feeding_date feeding_time death_of_carcass_known hours_since_death
## 1    8/30/2020  11:30:00 AM                     no                24
## 2     9/1/2020   2:15:00 PM                     no                24
## 3     9/4/2020  10:55:00 AM                     no                24
## 4     9/6/2020  11:10:00 AM                     no                24
## 5     9/7/2020   9:20:00 AM                     no                24
## 6    9/10/2020   1:00:00 PM                     no                12
##                   area   feeding_station         carcass_type weight_of_food
## 1      SdeBoker_Hatira       Tzaror_trap donkey, sheep, horse            350
## 2 Small_and_Big_crater Small_crater_view          ibex, sheep            130
## 3      SdeBoker_Hatira       Tzaror_trap          sheep, calf            310
## 4  South_Judean_desert     Ben_Yair_view           sheep, cow            660
## 5      SdeBoker_Hatira          Antenas                   cow            600
## 6         Ramon_crater            Kaolin            calf, cow            540
##   no_of_carcasses origin_carcass        ranger              remarks
## 1               3         בדואים      עין עבדת   לטובת לכידת נשרים 
## 2               3        הר הנגב    עודד צעירי הונח גם עוף מסוג אמו
## 3               7           מקרר      עין עבדת  לטובת לכידות נשרים 
## 4               2       טללי שדה ג'מיל אל אטרש                     
## 5               1       טללי שדה יבגני קמינסקי                     
## 6               2    קיבוץ צאלים   ידידה שמואל       הצבת שוקת מים 
##              datetime
## 1 2020-08-30 10:56:53
## 2 2020-09-01 13:16:41
## 3 2020-09-04 09:55:39
## 4 2020-09-06 10:13:52
## 5 2020-09-07 08:40:28
## 6 2020-09-10 12:26:09
## 
##         Arava_valley         Ramon_crater      SdeBoker_Hatira 
##                    7                   11                   28 
## Small_and_Big_crater  South_Judean_desert     West_negev_sands 
##                   22                    6                    1

Feeding station locations

Okay, now that we have that data, we critically need access to the feeding station data so that we can match these carcass drops to lat/long.

Exploratory mapping

## Reading layer `CutOffRegion.kml' from data source 
##   `/Users/kaijagahmpersonalprojects/Desktop/dataExploration/data/CutOffRegion.kml' 
##   using driver `KML'
## Simple feature collection with 1 feature and 2 fields
## Geometry type: POLYGON
## Dimension:     XYZ
## Bounding box:  xmin: 33.46685 ymin: 29.47732 xmax: 36.72913 ymax: 33.51767
## z_range:       zmin: 0 zmax: 0
## Geodetic CRS:  WGS 84
## 428x252 terrain-background map image from Stamen Maps. 
## See ?ggmap to plot it.

Okay, now that I know how to plot points and I know when and where the feeding events have occurred, time to plot points around each feeding station, color-coded by individual, around the time of the feeding events.

## Simple feature collection with 6 features and 10 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 34.777 ymin: 30.8615 xmax: 35.3305 ymax: 31.3321
## Geodetic CRS:  WGS 84
##   feeding_date feeding_time                 area   feeding_station
## 1    8/30/2020  11:30:00 AM      SdeBoker_Hatira       Tzaror_trap
## 2     9/1/2020   2:15:00 PM Small_and_Big_crater Small_crater_view
## 3     9/4/2020  10:55:00 AM      SdeBoker_Hatira       Tzaror_trap
## 4     9/6/2020  11:10:00 AM  South_Judean_desert     Ben_Yair_view
## 5     9/7/2020   9:20:00 AM      SdeBoker_Hatira          Antenas 
## 6    9/12/2020  10:00:00 AM      SdeBoker_Hatira       Tzaror_trap
##           carcass_type weight_of_food no_of_carcasses            datetime
## 1 donkey, sheep, horse            350               3 2020-08-30 10:56:53
## 2          ibex, sheep            130               3 2020-09-01 13:16:41
## 3          sheep, calf            310               7 2020-09-04 09:55:39
## 4           sheep, cow            660               2 2020-09-06 10:13:52
## 5                  cow            600               1 2020-09-07 08:40:28
## 6          sheep, calf            300               6 2020-09-12 09:00:47
##       lat    long                geometry
## 1 30.8615 34.8136 POINT (34.8136 30.8615)
## 2 30.9490 35.1508  POINT (35.1508 30.949)
## 3 30.8615 34.8136 POINT (34.8136 30.8615)
## 4 31.3321 35.3305 POINT (35.3305 31.3321)
## 5 30.9349 34.7770  POINT (34.777 30.9349)
## 6 30.8615 34.8136 POINT (34.8136 30.8615)

Distance from carcass vs. time

In the supplementary material of Harel et al. 2016, it says that carcasses are usually discovered and consumed within “a few days,” and that feeding by other scavengers also contributes to this. To be conservative, I’m going to examine a 4-day period after carcass deposition, regardless of when the vultures find the carcass. So that’s 96 hours.

I was going to try to animate this, but instead I’m just going to calculate distance over time and plot it. Duh.

Do this for all feeding events.

Detections and arrivals

  1. Define “detection” as a vulture passing within 1km of the site, regardless of speed or altitude.
  2. Define “arrival” as being within 0.25km with a ground speed < 5m/s and an elevation < 10m Calculate detections and arrivals for each bird at each carcass.

Latency

Time to first detection

Let’s assume that all carcasses will be detected within 10 days = 240 hours = 14400 minutes. So we’ll filter the data down to that.

## Rows: 26
## Columns: 15
## Groups: eventID [26]
## $ eventID                <int> 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, …
## $ ground_speed           <dbl> 16.1111111, 4.1666667, 9.4444444, 0.0000000, 8.…
## $ height_above_msl       <dbl> 673, 769, 699, 506, 1451, 865, 797, 488, 387, 1…
## $ location_lat           <dbl> 30.93593, 30.86246, 30.89881, 30.86148, 30.6513…
## $ location_long          <dbl> 34.78006, 34.80872, 35.04202, 34.81364, 34.8489…
## $ timestamp              <dttm> 2020-09-08 07:43:08, 2020-09-12 09:02:30, 2020…
## $ dateOnly               <date> 2020-09-08, 2020-09-12, 2020-09-17, 2020-09-21…
## $ trackId                <chr> "J11w", "A03w", "J18w", "J16w", "J35w", "T99b",…
## $ geometry               <POINT [°]> POINT (34.78006 30.93593), POINT (34.8087…
## $ timeSinceCarcassPlaced <drtn> 1382.666667 mins, 103.000000 mins, 660.000000 …
## $ distanceFromCarcass    <dbl> 0.313932528, 0.477437719, 0.401299332, 0.004350…
## $ groundElev             <dbl> 545, 485, 393, 497, 748, 302, 98, 461, 392, 354…
## $ height_above_ground    <dbl> 128, 284, 306, 9, 703, 563, 699, 27, 0, 1032, 1…
## $ detection              <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ visit                  <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,…

Time to first visit

## Rows: 18
## Columns: 15
## Groups: eventID [18]
## $ eventID                <int> 6, 8, 9, 11, 12, 13, 15, 17, 20, 23, 31, 36, 38…
## $ ground_speed           <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2777778, 0.0…
## $ height_above_msl       <dbl> 504, 506, 748, 335, 70, 540, 402, 480, 496, 365…
## $ location_lat           <dbl> 30.86165, 30.86148, 30.65264, 30.95561, 30.6413…
## $ location_long          <dbl> 34.81364, 34.81364, 34.85444, 35.05579, 35.1556…
## $ timestamp              <dttm> 2020-09-12 09:04:02, 2020-09-21 11:39:37, 2020…
## $ dateOnly               <date> 2020-09-12, 2020-09-21, 2020-09-23, 2020-09-30…
## $ trackId                <chr> "A09w", "J16w", "J35w", "T69b", "A20w", "T69b",…
## $ geometry               <POINT [°]> POINT (34.81364 30.86165), POINT (34.8136…
## $ timeSinceCarcassPlaced <drtn> 195.00000 mins, 36.00000 mins, 2009.20000 mins…
## $ distanceFromCarcass    <dbl> 0.016680626, 0.004350121, 0.116160694, 0.092181…
## $ groundElev             <dbl> 497, 497, 740, 345, 67, 538, 402, 471, 499, 400…
## $ height_above_ground    <dbl> 7, 9, 8, 0, 3, 2, 0, 9, 0, 0, 0, 2, 8, 0, 0, 5,…
## $ detection              <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ visit                  <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…

This looks very similar to the first detection graph. Let’s plot them against each other:

Detection vs. visit latency

First visit times for each bird at each carcass

Group by carcass and individual to get each bird’s first visit

Over time, # vultures within each distance band (0-1, 0-5, 0-10) etc. colored by band

for each carcass, # visits each hour.

  • this may help us determine depletion.

  • Aaand it did not. This is really not the pattern I was expecting to see… Still need to get a sense for carcass depletion.

ANIMATION

I’m going to be following this tutorial: https://hansenjohnson.org/post/animate-movement-in-r/

STEP 1:

## Simple feature collection with 6 features and 60 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 34.81339 ymin: 30.86163 xmax: 34.81348 ymax: 30.8617
## Geodetic CRS:  WGS 84
## # A tibble: 6 × 61
##   tag_id senso…¹ accel…² accel…³ accel…⁴ barom…⁵ batte…⁶ batte…⁷ exter…⁸ gps_h…⁹
##    <int>   <int>   <dbl>   <dbl>   <dbl>   <dbl>   <int>   <dbl>   <dbl>   <dbl>
## 1 1.26e9     653     183    -158    1012       0      90       0      24     1  
## 2 1.26e9     653      17    -113    1031       0      90       0      23     1  
## 3 1.26e9     653      88    -211    1008       0      90       0      25     1  
## 4 1.26e9     653    -110    -312     993       0      90       0      25     1  
## 5 1.26e9     653    -954    -106     356       0      90       0      24     1.1
## 6 1.26e9     653   -1005    -120    -117       0      90       0      24     1.1
## # … with 51 more variables: gps_satellite_count <int>, gps_time_to_fix <dbl>,
## #   ground_speed <dbl>, heading <dbl>, height_above_msl <dbl>,
## #   import_marked_outlier <chr>, light_level <dbl>, location_lat <dbl>,
## #   location_long <dbl>, magnetic_field_raw_x <dbl>,
## #   magnetic_field_raw_y <dbl>, magnetic_field_raw_z <dbl>,
## #   ornitela_transmission_protocol <chr>, tag_voltage <dbl>, timestamp <dttm>,
## #   update_ts <chr>, visible <chr>, deployment_id <dbl>, event_id <dbl>, …
## Simple feature collection with 6 features and 5 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 34.81339 ymin: 30.86163 xmax: 34.81348 ymax: 30.8617
## Geodetic CRS:  WGS 84
## # A tibble: 6 × 6
##   trackId timestamp           ground…¹ locat…² locat…³            geometry
##   <chr>   <dttm>                 <dbl>   <dbl>   <dbl>         <POINT [°]>
## 1 A00w    2020-09-08 03:49:35        0    30.9    34.8 (34.81348 30.86163)
## 2 A00w    2020-09-08 03:58:55        0    30.9    34.8 (34.81339 30.86167)
## 3 A00w    2020-09-08 04:08:56        0    30.9    34.8 (34.81345 30.86168)
## 4 A00w    2020-09-08 04:18:56        0    30.9    34.8 (34.81347 30.86164)
## 5 A00w    2020-09-08 04:28:56        0    30.9    34.8 (34.81341 30.86164)
## 6 A00w    2020-09-08 04:38:58        0    30.9    34.8  (34.81344 30.8617)
## # … with abbreviated variable names ¹​ground_speed, ²​location_lat,
## #   ³​location_long

STEP 2: Process the data

STEP 3: Make the plot

STEP 4: Make the animation

Okay, I would have to tweak this animation a lot more in order to really show them arriving at a carcass, I think.

ARRIVAL ORDER at known carcasses

Visits

Detections

Now we can do the same thing for detections that are NOT visits

Compare visits vs. detections

There is usually a relationship between detections and visits–i.e. those that detect the carcass later are also later to visit. But this isn’t always the case–in a few cases, there seems to be a negative relationship (those that first detect the carcass visit later than those that detect it later.)

NEXT STEPS:

  • Read the NBDA paper to figure out what information we need to assess info spread
  • Create networks to test alternative hypotheses
  • Follow NBDA procedures.